function f(v) {
	console.log(v)
}

function debounce(f, ms) {
	let timerId = null
	return function (v) {
		clearTimeout(timerId) // 取消前一个延时任务的执行。
		timerId = setTimeout(f, ms, v) // 因为 setTimeout 会立即执行，f 才属于延时任务等待执行。所以 timerId 第一次就有值。
	}
}

f = debounce(f, 1000)

// 这里调用了3次，但只打印出 "c" 才是对的。
f('a')
setTimeout(() => f('b'), 200)
setTimeout(() => f('c'), 500)

// * 防抖：就是你在指定的时间内，无论你调用多少次函数（在指定时间内每次调用都会重新计时，时间是累计增长的，加上开始例如点击的时间），但只会在给定的时间结束后执行一次的调用。

// 应用场景：防止按钮快速点击造成的重复提交。
